package com.yz.dao;

import com.yz.pojo.Blog;
import com.yz.pojo.dto.BlogDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface BlogMapper {

    // 查询总文章数
    int countBlog();

    // 查询已经发布的文章总数
    int countPublishedBlog();

    // 查询所有的文章
    List<BlogDto> queryAllBlog();

    // 查询所有的文件。返回类型为Blog.class
    List<Blog> queryAllBlogForBlog();

    // 查询已经发布的博客
    List<Blog> queryPublishedBlog();

    // 分页查询博客,从 start 开始,每页 count 条数据
    List<BlogDto> pagingQuery(@Param("start") Integer start, @Param("count") Integer count);

    // 增加博客
    int saveBlog(Blog blog);

    // 增加完博客,添加标签的联系
    int updateBlogTag(@Param("blogId") Integer blogId, @Param("tagIds") Integer[] tagIds);

    // 修改博客
    int updateBlog(Blog blog);

    // 删除博客
    int deleteBlog(@Param("ids") Integer[] ids);

    // 根据博客的标题、分类查询博客(实现根据关键字查询)
    List<BlogDto> queryBlogByTitleOrCategory(@Param("keyword") String keyword);

    // 根据博客的id查询博客
    Blog queryBlogById(@Param("blogId") Integer blogId);

    // 查询浏览量最高的四个博客
    List<BlogDto> queryTopViewsBlogs();

    // 查询最新发布的四篇博客
    List<BlogDto> queryRentBlogs();

    // 根据标签查询博客
    // 这里需要用子查询，就可以只用一条sql语句完成，但是我不会，有待研究
    Integer[] queryForTagId(@Param("tagId") Integer tagId);
    List<BlogDto> queryForBlogId(@Param("ids") Integer[] ids);

    // 根据分类查询博客，分页
    List<BlogDto> queryForCategoryId(@Param("start") Integer start, @Param("count") Integer count, @Param("categoryId") Integer categoryId);

    // 根据类别，统计博客数
    int countForCategoryId(@Param("categoryId") Integer categoryId);

    // 博客浏览数加 1
    public boolean viewsIncr(@Param("blogId") Integer blogId);

    //测试
    List<BlogDto> query(Integer test);
}
